<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>立即执行函数</title>
    <script>
        /* 
            在开发中尽量减少直接在全局作用域中编写代码。

            所以我们的代码要尽量编写在局部的作用域中。

            如果使用let 声明变量，可以用{}来创建块作用域。
            用var声明的变量可以写在函数作用域中分开(可以但不完美)
            我们希望创建一个匿名函数，且执行一次的函数，来区分var声明的变量。


            立即执行函数(IIFE)

                (function () {
                        函数体
                }
                    ())

            立即执行函数是一个匿名函数，并且只会调用一次。

            可以用IIFT来创建一次性的函数作用域来避免变量发生冲突。

        */

        {
            let a = 10
        }

        {
            let a = 20
        }


        function fn1() {
            var a = 30
        }

        fn1()


        function fn2() {
            var a = 40          // 这样之前的a就不会被覆盖,但是引入的函数名，并且还是还需要调用，就又存在缺点。
        }

        fn2();              // 一定要注意分号，不加分号(1)(2)像这样连在一起写，JS会认为1是2的函数，在调用2

 /* ============================================================================ */

            (function () {
                var a = 10
                console.log('11111')
            }());       //  分号


            (function () {
                var a = 50
                console.log('2222')
            }())
    </script>
</head>

<body>

</body>

</html>